<?php

namespace App\Jsonrpc;

use function Hyperf\Support\make;
use App\Logic\Payment\PayLogic;
use App\Rpc\PaymentServiceInterface;
use Hyperf\RpcServer\Annotation\RpcService;

#[RpcService(name:"payment", protocol:"jsonrpc-http", server:"jsonrpc")]
class PaymentService implements PaymentServiceInterface
{
    /**
     * 发起一次支付宝支付
     * https://pay.yansongda.cn/docs/v3/alipay/pay.html
     * @param string $order_sn 订单号
     * @param int $amount 支付金额：分
     * @param string $subject 支付描述
     * @param string $method 支付方式：web，wap，app，pos，scan，mini
     * @param array $options 可选配置:支付模式，其他额外参数
     * @return mixed 返回调起支付的参数
     */
    public function alipay(string $order_sn,int $amount,string $subject,string $method,array $options = []) :mixed
    {
        return make(PayLogic::class)->alipay($method,$options);
    }


    /**
     * 发起一次微信支付
     * https://pay.yansongda.cn/docs/v3/wechat/pay.html
     * @param string $order_sn 订单号
     * @param int $amount 支付金额：分
     * @param string $subject 支付描述
     * @param string $method 支付方式：mp，wap，app，pos，scan，mini,
     * @param array $options 可选配置:支付模式，其他额外参数
     * @return mixed 返回调起支付的参数
     */
    public function wechat(string $order_sn,int $amount,string $subject,string $method,array $options = []) :mixed
    {
        return make(PayLogic::class)->wechat($method,$options);
    }

    /**
     * 发起一次银联支付
     * https://pay.yansongda.cn/docs/v3/unipay/pay.html
     * @param string $order_sn 订单号
     * @param int $amount 支付金额：分
     * @param string $subject 支付描述
     * @param string $method 支付方式：web，wap，pos，scan
     * @param array $options 可选配置:支付模式，其他额外参数
     * @return mixed 返回调起支付的参数
     */
    public function unipay(string $order_sn,int $amount,string $subject,string $method,array $options = []) :mixed
    {
        return make(PayLogic::class)->unipay($method,$options);
    }

    /**
     * 查询订单
     * @param string $order_sn 订单号
     * @return array
     */
    public function query(string $order_sn) :array
    {
        return [];
    }

    /**
     * 订单退款
     * @param string $order_sn  订单号
     * @param int $amount 退款金额： 分
     * @return bool 是否成功
     */
    public function refund(string $order_sn, int $amount) : bool
    {
        return true;
    }

}